package cn.itcast.web.shiro;

import cn.itcast.common.utils.Encrypt;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.SimpleCredentialsMatcher;

/**
 * 自定义密码比较器
 *  1、继承父类 SimpleCredentialsMatcher
 *  2、重写doCredentialsMatch方法（密码加密比较）
 * * 英文
 *  Credentials ： 密码
 *  Principal：安全数据（用户对象）
 */
public class CustomCredentialsMatcher extends SimpleCredentialsMatcher {

	/**
	 * 密码比较方法
	 *  参数：
	 *      token ： 用户登录输入的用户名（邮箱）和密码
	 *      info：realm域认证的返回值（用户对象，数据库密码，域名称）
	 *  返回值boolean：
	 *      true：登录输入密码和数据库密码一致
	 *      flase：不一致，自动的抛出异常
	 */
	public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
		//1.获取输入的用户名（邮箱）密码
		UsernamePasswordToken upToken = (UsernamePasswordToken) token;
		String email = upToken.getUsername();
		String password = new String(upToken.getPassword());
		//2.获取数据库中的密码
		String dbPassword = (String)info.getCredentials();
		//3.对用户登录输入的密码加密
		password = Encrypt.md5(password,email);
		//4.比较
		return dbPassword.equals(password);
	}
}
